package ltd.flython.dlock.common;

import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;
import java.util.function.Consumer;
import java.util.function.Function;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DLocked {
    /**
     * 锁的名字
     */
    @AliasFor("name")
    String value() default "";

    /**
     * 锁的名字
     */
    @AliasFor("value")
    String name() default "";

    /**
     * 与key组成一个锁实例，支持SpEl表达式
     * @return
     */
    String key() default "";

    /**
     * 延迟解锁 (单位ms)，完成业务后，保留锁一段时间，作为防止重入的保险
     * @return
     */
    long unlockDelay() default 0;

    /**
     * 抛出异常立刻解锁，此时延迟解锁失效
     * @return
     */
    boolean unlockImmediatelyException() default true;

}
